#!/bin/bash
set -euo pipefail
BaseDir=$(cd "$(dirname "$0")"; pwd)
cd ${BaseDir}

op=${1-""}

case "${op}" in
#
"core")
    echo "单实例精简部署..."
    # https://github.com/vesoft-inc/nebula-docker-compose/releases/tag/v3.8.0
    pushd nebula-docker-compose-3.8.0
        docker compose -f ./docker-compose-lite.yaml -p nebulacore up -d
    :<<EOF
    默认的端口分布
        https://docs.nebula-graph.com.cn/3.8.0/20.appendix/port-guide/
        19669	Graph 服务的 HTTP 端口 
        19559	Meta 服务的 HTTP 端口
        19779   Storage 服务的 HTTP 端口
EOF
        sleep 10
        # {"git_info_sha":"7458486","status":"running"}
        curl http://localhost:19669 | grep 'running'
        curl http://localhost:19559 | grep 'running'
        curl -v http://localhost:19779 || true
        
        docker compose -f ./docker-compose-lite.yaml -p nebulacore ps
        #graphd可能启动失败，且compose文件的restart: on-failure已注释，因此再次启动下
        while ! curl -s http://localhost:19669 | grep -q 'running'; do
            echo "服务未运行，正在尝试启动..."
            sleep 3
            docker compose -f ./docker-compose-lite.yaml -p nebulacore up graphd -d
        done
    popd
;;
#
#  可以导入实例数据 demo_sns，然后这个 match (n:address) return n 查看数据
studio)
    echo "studio运行"
    echo "studio加入的是core的网络"
    docker network inspect nebulacore_nebula-net
    docker compose -f ./console.yaml up studio -d
    curl http://localhost:7001 ||true
    # 登录的 Graphd IP 可以填写 core服务的名称 graphd,默认没开启认证，用户任意起名： 如 root/root

    # 如何处理错误信息Host not enough! 从 3.0.0 版本开始，在配置文件中添加的 Storage 节点无法直接读写，配置文件的作用仅仅是将 Storage 节点注册至 Meta 服务中。必须使用ADD HOSTS命令后，才能正常读写 Storage 节点。
    # http://localhost:7001/console 执行 ADD HOSTS "storaged0":9779 后即可操作，此时示例的数据才可以导入
;;
# 图探索比较强些
studio-323)
    #需要 ./run.sh studio 运行后，按照上面说明配置好库，再运行这个好点【毕竟这个studio版本低】
    echo "有图探索的studio启动-交互模式[CTRL+C退出]"
    echo "http://localhost:7002 连接 graphd:9669 进入"
    docker compose -f ./console.yaml up studio-323
;;
#
down-studio)
    echo "清理studio的运行信息"
    docker compose -f ./console.yaml down
;;

down)
    echo "stop all service"
    docker compose -f ./console.yaml down
    pushd ./nebula-docker-compose-3.8.0 
        docker compose -f ./docker-compose-lite.yaml -p nebulacore down
        read -t 10 -p "清理历史数据（y/n） 默认n "
        if [ "$REPLY" = "y" ]; then
            rm -rf ./data
            rm -rf ./logs
        fi
    popd
;;
#
*)
    echo "nebula基础服: ./run.sh core | down"
    echo "GUI控制台: ./run.sh studio studio-323 | down-studio"
    echo "udocker: python下udocker模式启动，参考 NebulaGraph_Lite.md"
    echo "CLI连接nebula服务: ../runcases.sh cstart; ../runcases.sh csh 输入命令即可操作"
;;

esac

echo "done"